热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

极智AI|Tengine模型转换及量化

欢迎关注我的公众号[极智视界],回复001获取Google编程规范O_o _

欢迎关注我的公众号 [极智视界],回复001获取Google编程规范

O_o>_<o_OO_o~_~o_O

  本文介绍一下 Tengine 模型转换及量化流程。

  Tengine 同 ncnn 一样&#xff0c;也是优秀的端侧推理框架&#xff0c;前面写过一篇《ncnn 模型转换及量化流程》&#xff0c;有兴趣的同学可以查阅。

  下面开始。

文章目录

    • 1、编译 Tengine Tools
    • 2、Tengine 模型转换
    • 3、Tengine 量化推理


1、编译 Tengine Tools

  CmakeList.txt 中打开 CONVERT_TOOL 和 QUANT_TOOL 开关&#xff1a;

  开始编译&#xff1a;

cd <Tengine-path>
mkdir buildcd build# 开始编译
camke ..
make -j32
make install

  编译完会在 ./build/install/bin/ 目录下生成 convert_toolquant_tool&#xff0c;如下&#xff1a;



2、Tengine 模型转换

  用如下命令看一下 convert_tool 需要什么样的传参&#xff1a;

cd ./build/install/bin./convert_tool -h

  如上&#xff0c;前面为输入&#xff0c;后面为输出。

  Tengine 提供的模型转换工具前端支持的十分丰富&#xff0c;基本通吃了国外、国内主流的深度学习框架。

  前端为 Caffe&#xff1a;

./convert_tool -f caffe -p ./mobilenet.prototxt -m ./mobilenet.caffemodel -o ./mobilenet.tmfile

  前端为 Onnx&#xff1a;

./convert_tool -f onnx -m ./mobilenet.onnx -o ./mobilenet.tmfile

  前端为 Mxnet&#xff1a;

./convert_tool -f mxnet -p ./mobilenet.params -m ./mobilenet.json -o ./mobilenet.tmfile

  前端为 Darknet&#xff1a;

./convert_tool -f darknet -p ./yolov3.weights -m ./yolov3.cfg -o yolov3.tmfile

  前端为 TensorFlow&#xff1a;

./convert_tool -f tensorflow -m mobielenet_v1_1.0_224_frozen.pb -o mobilenet.tmfile

  前端为 TFLite&#xff1a;

./convert_tool -f tflite -m mobielenet.tflite -o mobilenet.tmfile

  前端为 MegEngine&#xff1a;

./convert_tool -f megengine -m mobilenet.pkl -o mobilenet.tmfile

  前端为 OneFlow&#xff1a;

./convert_tool -f oneflow -p mobilenet.prototxt -m mobilenet/ -o mobilenet.tmfile

  前端为 ncnn&#xff1a;

./convert_tool -f ncnn -p mobilenet.param -m mobilenet.bin -o mobilenet.tmfile



3、Tengine 量化推理

  可以看到 Tengine 提供的量化工具有三个&#xff1a;quant_tool_int8quant_tool_uint8quant_tool_uint8_perchannel&#xff0c;分别是对称量化、非对称量化、非对称逐通道量化&#xff0c;里面的量化策略类似&#xff0c;这里挑 quant_tool_int8说一下。

  先安装一下依赖库&#xff1a;

apt update
apt install libopencv-dev

  用如下命令查看量化工具传参&#xff1a;

./quant_tool_int8 -h

  可以看到传参还是比较丰富的。

  前端输入为 fp32 tmfile&#xff0c;执行量化示例&#xff1a;

./quant_tool_int8 -m ./mobilenet_fp32.tmfile -i ./dataset -o ./mobilenet_int8.tmfile -g 3,224,224 -w 104.007,116.669,122.679 -s 0.017,0.017,0.017

  执行成功会输出如下日志&#xff1a;

  并生成如下 int8 模型文件&#xff1a;

  然后就可以拿去执行推理了。


  以上分享了 Tengine 模型转换及量化方法&#xff0c;希望我的分享能对你的学习有一点帮助。


 【公众号传送】

《【模型推理】Tengine 模型转换及量化》



扫描下方二维码即可关注我的微信公众号【极智视界】&#xff0c;获取更多AI经验分享&#xff0c;让我们用极致&#43;极客的心态来迎接AI &#xff01;


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了在多平台下进行条件编译的必要性,以及具体的实现方法。通过示例代码展示了如何使用条件编译来实现不同平台的功能。最后总结了只要接口相同,不同平台下的编译运行结果也会相同。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
author-avatar
髻续儛动
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有